package com.msb.dongbao.common.base.aop;

import com.msb.dongbao.common.base.annotations.TokenCheck;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**
 * @author: mayu
 * @date: 2021年05月27日 17:32
 */
@Component
@Aspect
@Slf4j
public class TokenCheckAspect {
    // 配置织入点
    @Pointcut("@annotation(com.msb.dongbao.common.base.annotations.TokenCheck)")
    public void logPointCut() {
    }

    /**
     * 第一个参数为boolean 的所有方法执行，返回结果
     *
     * @param point
     */
    @AfterReturning(pointcut = "logPointCut()")
    public void tokenInfo(JoinPoint point) {
        log.info("进入切面执行代码...");
        //获取切入点所在的类
        String className = point.getSignature().getDeclaringTypeName();
        //获取切入点所在的方法名
        String methodName = point.getSignature().getName();
        //获取切入点所在的方法签名
        MethodSignature methodSignature = (MethodSignature) point.getSignature();
        Method method = methodSignature.getMethod();
        //获取注解TokenCheck
        TokenCheck tokenCheck = method.getAnnotation(TokenCheck.class);
        //获取注解TokenCheck的required参数的值
        boolean required = tokenCheck.required();
        log.info("required：" + required);
        log.info("离开切面...");
    }
}
